package transientlearn;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;

/**
 * java 提供了 Serializable 接口，实现该接口的类在网络操作（主要涉及到序列化操作，本地序列化缓存也适用）中可以被传输
 * 如果有部分属性不希望能够传输（比如密码字段）,可以加上transient字段
 * 
 * 总结：
 * 一旦变量被transient修饰，变量将不再是对象持久化的一部分，该变量内容在序列化后无法获得访问。
 * transient关键字只能修饰变量，而不能修饰方法和类
 * 一个静态变量不管是否被transient修饰，均不能被序列化
 * 
 * @author 10255_000
 *
 */

public class Demo1 {
	
	
	public static void main(String[] args){
		HashMap hashmap = new HashMap();
		
		User user = new User("zhangsan", "111111");
		System.out.println("--存储之前--"+user.toString());
		
		try {
			ObjectOutputStream os = new ObjectOutputStream(
                    new FileOutputStream("D:/user.txt"));
			
			FileInputStream fileInputStream = new FileInputStream("D:/user.txt");
			
			
			os.writeObject(user);
			os.flush();
            os.close();
            
            ObjectInputStream is = new ObjectInputStream(new FileInputStream(
                    "D:/user.txt"));
            user = (User) is.readObject(); // 从流中读取User的数据
            is.close();
            
            System.out.println("--存储之后--"+user.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
	}
	
}

class User implements Serializable {
	private String name;
	private transient String password;
	
	public User(){
	}
	
	public User(String name, String password) {
		super();
		this.name = name;
		this.password = password;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	@Override
	public String toString() {
		return "User [name=" + name + ", password=" + password + "]";
	}
}
